﻿using APPFrameworkStudy.Domain;
using APPFrameworkStudy.Repository;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace APPFrameworkStudy.DAL.SqlServer
{

    public class SqlServerDataContext : BaseDataContext
    {
        public override IDataMapper<T> GetDataMapper<T>()
        {
            //每次调用一个方法都实例化一个数据访问对象，因为EF数据访问对象不是为长时间使用的

            //方法一：推荐使用
            if (typeof(T) == typeof(Order))
            {
                return (IDataMapper<T>)new OrderDataMapper();
            }
            else
            {
                //暂不支持其他类型
                throw new Exception("unsupported type");
            }


            ////////方法二：也可以使用微软Unity工具控制反转实现，在Nuget中搜索unity下载安装
            Type t = typeof(T);
            //实例化容器类.
            UnityContainer container = new UnityContainer();
            //绑定配置文件<unity>节点中的操作信息
            UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
            //解析 数据映射器
            IDataMapper<T> mapper = (IDataMapper<T>)container.Resolve(t);
            return mapper;
        }

    }
}
